﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Bigger.Base.Pipeline;
using Bigger.Framework;
using Bigger.Web.Mvc;

namespace Bigger.Study.Web.Controllers
{
    public class StudyController : ApiMessageController
    {
        /// <summary>
        /// 是否是微信客户端请求
        /// </summary>
        public bool IsWxRequest
        {
            get
            {
                if (string.IsNullOrWhiteSpace(Request.UserAgent))
                {
                    return false;
                }
                return Request.UserAgent.Contains("MicroMessenger");
            }
        }

        /*
         * 如果每个Api请求需要判断是否是微信发起的请求，现在的做法可以有：
         * 1、自定义Mvc过滤器；
         * 2、重写Controller本身的OnActionExecuting
         * 3、自定义DelegatingHandler或者注册DelegatingHandler的事件SendHandle，最后在管道模型中引用DelegatingHandler
         * 4、直接在发起Api的请求中验证
        */


        /*
         *通用接口理应暴露一些临时的安全的Api文档，不应暴露所有的Api文档
         *可以先进行服务端验证，最后调用ApiMessageGet、或者ApiMessagePost、或者CacheApiHandler，推荐使用
        */

        #region 类似于UpiService暴露的通用接口的使用方式
        [HttpGet]
        [ActionName("ExecuteApi")]
        public ActionResult ExecuteApiGet(ApiPackage objApiPackage)
        {
            //todo：请在这里进行Api文档的过滤，或者在Api的属性IsExposured设置为true
            //return ApiMessage(objApiPackage, new ApiExposureHandler());
            return ApiMessageConfig(objApiPackage, "MvcCommonApiMessageGet");
        }

        [HttpPost]
        [ActionName("ExecuteApi")]
        public ActionResult ExecuteApiPost(ApiPackage objApiPackage)
        {
            //todo：请在这里进行Api文档的过滤，或者在Api的属性IsExposured设置为true
            //return ApiMessage(objApiPackage, new ApiExposureHandler());
            return ApiMessageConfig(objApiPackage, "MvcCommonApiMessagePost");
        }

        /// <summary>
        /// 类似于UpiService暴露的通用的接口的使用方式，不一样的是提供了缓存的输出
        /// </summary>
        /// <param name="objApiPackage"></param>
        /// <returns></returns>
        public ActionResult ExecuteApiCache(ApiPackage objApiPackage)
        {
            //todo：请在这里进行Api文档的过滤，或者在Api的属性IsExposured设置为true
            return ApiMessageConfig(objApiPackage, "MvcCommonCacheApiMessage");
        }
        #endregion
    }
}